package com.example.smartagriculture.utils;
import java.util.*;
import java.util.Vector;


public class MapUtil {
    private HashMap<String, Vector<Integer>> mapStrVecInt;
    //private HashMap<String, ArrayList<Integer>> mapStrVecInt;
    private HashMap<String, Integer> mapStrInt;
    //public MapUtil() {
    //    mapStrVecInt = new HashMap<>();
    //}
    public MapUtil(String Str) {
        mapStrVecInt = new HashMap<>();
        stringToMapStrVecInt(Str);
    }
    //public HashMap<String, Vector<Integer>> getMapStrVecInt() {
    //    return mapStrVecInt;
    //}
    public HashMap<String, Integer> getMapStrInt() {
        return mapStrInt;
    }
    public void stringToMapStrVecInt(String Str){
        Scanner sc = new Scanner(Str);
        String name;
        int num;
        while (sc.hasNext()) {
            name = sc.next();
            num = sc.nextInt();
            mapStrVecInt.putIfAbsent(name, new Vector<>());
            //mapStrVecInt.putIfAbsent(name, new ArrayList<>());
            mapStrVecInt.get(name).add(num);
        }
        sc.close();
    }
    //vec数组总和平均
    public void averageMapStrInt() {
        mapStrInt = new HashMap<>();
        for (String key : mapStrVecInt.keySet()) {
            int sum = 0;
            Vector<Integer> vec = mapStrVecInt.get(key);
            //ArrayList<Integer> vec = mapStrVecInt.get(key);
            for (int num : vec) {
                sum += num;
            }
            mapStrInt.put(key, sum / vec.size());
        }
    }
    //vec排序数组首尾双数平均法
    public void sortedHeadTailTwoAverageMapStrInt() {
        mapStrInt = new HashMap<>();
        for (String key : mapStrVecInt.keySet()) {
            int sum;
            Vector<Integer> vec = mapStrVecInt.get(key);
            //ArrayList<Integer> vec = mapStrVecInt.get(key);
            if (vec.size() == 1) {
                mapStrInt.put(key, vec.get(0));
                continue;
            }
            Collections.sort(vec);
            int a1 = vec.get(0);
            int a2 = vec.get(1);
            int z1 = vec.get(vec.size()-1);
            int z2 = vec.get(vec.size() - 2);
            sum = a1 + a2 + z1 + z2;
            mapStrInt.put(key, sum / 4);
        }
    }
    //换行打印map信息
    public void printMapStrInt() {
        for (String key : mapStrInt.keySet()) {
            System.out.println(key + " " + mapStrInt.get(key));
        }
    }
    @Override
    public String toString() {
        String str = new String();
        for (String key : mapStrInt.keySet()) {
            str += key + " " + mapStrInt.get(key) + " ";
        }
        return str;
    }
}
